/* 
 * File:   Nivel.h
 * Author: fibrizo
 *
 * Created on 24 de mayo de 2014, 19:13
 */

#ifndef NIVEL_H
#define	NIVEL_H

#include <vector>
#include "server_Enemigo.h"
#include "server_Planta.h"
#include "server_Bomberman.h"
#include "server_Mapa.h"
#include <list>

#define TIERRA 48
#define CAJA 49
#define CAJA_CON_ZOMBIE 50
#define METAL 51
#define ZOMBIE_VERDE 52
#define ZOMBIE_AZUL 53
#define ZOMBIE_ROJO 54
#define PLANTA 55
#define BOMBA_BOMBERMAN 56
#define BOMBA_PLANTA 57
#define SEPARADOR 35
#define COMIENZO_BOMBERMANS 97
#define FIN_BOMBERMANS 122

using std::vector;
using std::list;
using std::string;

class Nivel {
private:
    Mapa mapa;
    string tileMap;
    size_t cantZombiesVerdes;
    size_t cantZombiesAzules;
    size_t cantZombiesRojos;
    vector<Enemigo*> enemigos;
    vector<Planta*> plantas;
    vector<Bomberman*> personajes;
    list<Bomba*> bombas;
    bool terminado;
    bool inicializado;
    string establecerDireccionPlanta(Coordenada coord);
    vector<Coordenada> listaSpawnBomberman;
    
public:
    // Constructores
    Nivel();
    Nivel(int tamanio, string tileMap);
    Nivel(const Nivel& orig);
    // Metodos
    void setZombies(size_t verdes, size_t azules, size_t rojos);
    size_t getCantEnemigos();
    size_t getCantPlantas();
    size_t getCantBombermans();
    void actualizar();
    bool termino();
    void inicializar(string tileMap, vector<Bomberman*> listaDeBombermans);
    string establecerDireccionPlanta();
    string getTileMap();
    bool ganado();
    // Destructor
    virtual ~Nivel();
};

#endif	/* NIVEL_H */

